package com.example.util;

import java.math.BigDecimal;

/**
 * @author readpage
 * @date 2023-02-08 11:31
 */
public class ByteUtils {
    public static final Integer KB_SIZE = 1 << 10;
    public static final Integer MB_SIZE = 1 << 20;
    public static final Integer GB_SIZE = 1 << 30;

    /**
     * 二进制转换其他单位大小
     * @param bytes 二进制
     * @param unit 单位大小
     * @return
     */
    public static BigDecimal bytesUnit(long bytes, Integer unit) {
        BigDecimal size = new BigDecimal(bytes);
        BigDecimal u = new BigDecimal(unit);
        return size.divide(u, 2, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 其他进制转二进制
     * @param decimal
     * @param unit
     * @return
     */
    public static Long unitByte(BigDecimal decimal, Integer unit) {
        return decimal.multiply(BigDecimal.valueOf(unit)).longValue();
    }

    /**
     * kb转换为字节
     * @param decimal
     * @return
     */
    public static Long kbByte(BigDecimal decimal) {
        return decimal.multiply(BigDecimal.valueOf(KB_SIZE)).longValue();
    }

    /**
     * mb转换为字节
     * @param decimal
     * @return
     */
    public static Long mbByte(BigDecimal decimal) {
        return decimal.multiply(BigDecimal.valueOf(MB_SIZE)).longValue();
    }

    /**
     * gb转换为字节
     * @param decimal
     * @return
     */
    public static Long gbByte(BigDecimal decimal) {
        return decimal.multiply(BigDecimal.valueOf(GB_SIZE)).longValue();
    }

    /**
     * 返回kb单位大小
     * @param bytes
     * @return
     */
    public static BigDecimal toKb(long bytes) {
        return bytesUnit(bytes, KB_SIZE);
    }

    /**
     * 返回kb单位大小
     * @param bytes
     * @return
     */
    public static BigDecimal toMb(long bytes) {
        return bytesUnit(bytes, MB_SIZE);
    }

    /**
     * 返回gb单位大小
     * @param bytes
     * @return
     */
    public static BigDecimal toGb(long bytes) {
        return bytesUnit(bytes, GB_SIZE);
    }

}
